import shutil
import re
import glob
import platform
import configparser
import os

# 返回当前文件名的绝对路径
work_file = os.path.abspath(__file__)
print(work_file)
# 返回当前文件路径
work_dir = os.path.dirname(work_file)
print(work_dir)
# 路径是否存在
print(os.path.exists(work_file))
# 分割文件名与路径
print(os.path.split(work_file))
# 将目录与文件名合成一个路径
print(os.path.join(work_dir, 'test1001.py'))

# isinstance() 函数来判断一个对象是否是一个已知的类型，类似 type()。type() 不会认为子类是一种父类类型，不考虑继承关系。isinstance() 会认为子类是一种父类类型，考虑继承关系。
# 如果要判断两个类型是否相同推荐使用 isinstance()。
print(isinstance(12, int))
print(isinstance([12, 13, 14], (str, int, list)))

# 读取配置文件
config = configparser.ConfigParser()
config_dir = os.path.join(work_dir, 'Tips\config.conf')
config.read(config_dir)
# 得到所有的section，并以列表的形式返回
sections = config.sections()
print(sections)
# 得到该section的所有option
options = config.options('Db')
print(options)
# 得到该section的所有键值对
items = config.items('Db')
print(items)
# 得到section中option的值，返回为string类型
key = config.get('Db', 'name')
print(key)
# 得到section中option的值，返回为int类型，还有相应的getboolean()和getfloat() 函数。
value = config.getint('Db', 'prot')
print(value)
# 得到section中option的值
Boolen = config['Db']['Boolen']
print(Boolen)
# content = ''
# with open(config_dir, 'r') as f:
#     content += f.read().lower()
# print(content)

# platform模块：获得当前系统类型
system = platform.system().lower()
system1 = platform.system()
print(system, system1)
print(platform.platform(), platform.version())
print(platform.machine())

# glob模块：获取当前目录下所有指定类型文件
print(glob.glob('*.py'))
print(glob.glob(r'**\*.py', recursive=True))
print(glob.glob('*'))
# 当**规则与另一个参数recursive=True配合，可以深入的路径的子目录当中去匹配：
print(glob.glob(r'C:\Users\vainuer\Desktop\Test\**\*.conf', recursive=True))

# 获取上级目录文件
print(glob.glob(r'..\*'))  # 相对路径
f = glob.iglob(r'..\*.py')
for i in f:
    print(i)

# re模块：正则表达式
pattern = re.compile(r'\d+')
result = pattern.match('123456d85')
print(result.span())
print(result.group(0))
result = re.match(r'\d+', '123456d85')
print(result.group(0))

# 按条件分割字符串
string = '123/456/789'
print(string.split('/'))
print(string.split('/')[-1])

# 输出系统对应环境变量的映像对象
JAVA_HOME = os.environ['JAVA_HOME']  # 相当于 os.getenv('JAVA_HOME')
print(JAVA_HOME)
TEMP = os.environ['TEMP']
print(TEMP)
# 设置环境变量
os.environ['HJS'] = 'hjsTest'
print(os.environ['HJS'])
os.environ['HJS'] = os.environ['HJS']+'123'
print(os.environ['HJS'])
# print(os.environ)

# 创建文件夹、文件
folder1 = 'HJS'
folder2 = 'HJSA/101'
folder3 = 'HJSA'
newfile = os.path.join(os.getcwd(), '1.txt')
remove_list = [
    os.path.join(os.getcwd(), folder1),
    os.path.join(os.getcwd(), folder2),
    os.path.join(os.getcwd(), folder3),
    os.path.join(os.getcwd(), newfile),
]
if os.path.exists(remove_list[0]):
    pass
else:
    os.mkdir(folder1)
if os.path.exists(remove_list[1]):
    pass
else:
    os.makedirs(folder2)
if os.path.exists(remove_list[3]):
    pass
else:
    with open(newfile, 'w') as f:
        pass
# 删除文件夹、文件
key = input('input `y` to continue, other input will be take as a no:')
if key != 'y':
    exit(0)
for i in remove_list:
    if not os.path.exists(i):
        continue
    if os.path.isdir(i):
        shutil.rmtree(i)  # 递归地删除文件
    else:
        os.remove(i)
